Lectured by HUNG-YI LEE (李宏毅)
Recorded by Yusheng zhao(yszhao0717@gmail.com)
Lecture 9:Explainable ML(Machine Learning)Why we need Explainable ML?interpretable v.s. powerfulGoal of Explainable MLExplainable MLLocal ExplanationWhich component is critical?Limitation:Noisy GradientHow a network processes the input data?——network是怎么处理这个输入的呢Global Explanation有效的一招:Constraint from GeneratorOutlook
到目前为止,我们训练了很多类型的模型。我们有做到图像分类任务的深度学习模型,输入一张图片,它给我们答案,不单单满足于此,我们还想了解到它得到答案的理由。
就算机器总是能得到正确的答案,却不一定表示机器是“智能”的。
神马汉斯的例子
现在的人工智能的应用中,可解释性的机器学习模型往往是必须的。
我们可以基于可解释性的框架来不断改进机器学习模型
以Linear model为例:interpretable往往要求模型非常简单,这导致相对的not powerful。
以Deep network为例:black boxes…难以解释,但远比Linear model更加powerful
不应该因为一个模型difficult to interpretable就扬弃它,而应当再利用powerful的性能的同时去试图追加可解释性。
一位醉汉在路灯下面找钥匙的故事
因此我们的目标就是要找到强大并且简单到具备可解释性的模型
目标模型1:决策树(decision tree)
decision tree is all you need? :)
之前几讲的作业——明确的目标:降低error rate或是提升accuracy
然而,Explainable ML的目标是不明确的。(作业也没有leaderboard)关于Explainable ML的目标以下是老师的几点看法:
Completely know how an ML model works?(整个模型在做什么事,完全了解模型如何做一个决策)
我们真的需要Completely know how an ML model works? 事实上,我们也不完全了解人脑是如何运作的,但是我们完全相信人所做出的决策。
一个有趣的心理实验

好的Explanation:人能接受的Explanation
玄学的心理要素:给一个”理由“,让人(用户、reviewers、自身)comfortable,让人高兴。
分成两大类:Local Explanation、Global Explanation
对特定的某个数据要求机器(模型)做一个针对结果的解释
Why do you think is a cat?

如上图,给机器一张图片的时候,图片里的什么东西(eye?ear?)让机器觉得这是一只猫(做出判断)
对于,推广来说可以是影像、文本等,这个可以拆成若干个component,对应来说这里每一个component就是一个pixel或者segment或者a word(token)等——这些compoment中哪些/哪一个对于机器做出判断起到决定性作用?
(最简单的一种方式)类似于对照实验:把每一个component单独拿出来,做一个改造/删除,之后如果network的输出发生巨大的变化,那么表面这个component必不可少。
E.g. 用mask盖住图像来测试网络的输出(控制变量了属于是)

这个实验提供了网络中对于目标的位置信息。
量化component重要性:进阶的一种方式(计算梯度)。
有一张图片将其写做,每个代表一个pixel。
然后我们来计算这个例子的loss,记作,这个loss值是ground truth和网络/模型输出的相异性的度量(一般是cross entropy)。e越大表示辩识结果越差。
对于某一个pixel,将其component加一个小小的增量,计算所得的,如果这个很大,表明这个component对网络输出有着较大的影响。如果趋近于,那么这个pixel就比较无关紧要。我们通常用
来表示相对应component的重要性(好像灵敏度分析),以上公式表明该测量其实就是对loss做偏微分。
把这张图片中每一个pixel的这个重要性都算出来,组成新的图称之为Saliency Map
图上越偏白色,表明值越大,这个pixel越重要。
Karen Simonyan, Andrea Vedaldi, Andrew Zisserman, “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”, ICLR, 2014
实践:训练一个分类宝可梦和数码宝贝的分类器
资料:
- Pokémon images:https://www.Kaggle.com/kvpratama/pokemon-images-dataset/data
- Digimon images:https://github.com/DeathReaper0965/Digimon-Generator-GAN
实验结果,泛化Accuracy十分amazing!
画Saliency Map
- 资料差异。画的map发现机器只关注非本体部分(背景),实际上因为文件格式差异,宝可梦和数码宝贝资料图像背景颜色不同(透明即黑。机器只根据这个来实现二分类。
更多的实践:
数据集的巨大影响:机器的关注点。判断“马”的训练资料通常有相同的水印,水印部分便成为判断是否马的重要的component。
👆的启示:Explainable Machine Learning是非常重要的。
有没有什么方法能把Saliency Map画得更好呢?

流程:在图片上面加上不同的噪声,得到若干张不同加上噪声的图片,从而获得数张Saliency Map,平均起来就得到SmoothGrad的结果。
光看梯度(Gradient)并不能反映component的重要性或者说梯度(Gradient)并不能总是反映component的重要性
E.g.
鼻子越长,大象的可能性趋近不变,这是得到的偏微分趋近于0,难道这就说明了鼻子长度的变化与是否大象可能性的变化无关?显然是错误的。
所以光看偏微分的结果没法完全反映component的重要性
改善的方法:Integrated Gradient(IG):https://arxiv.org/abs/1611.02639
最直觉的:可视化(Visualization)
作业BERT以及语音识别,
- 以一个layer的100个神经元为例:PCA or t-SNE让100维向量降到2维;plot on figure
来自A. Mohamed, G. Hinton, and G. Penn, “Understanding how Deep Belief Networks Perform Acoustic Modelling,” in ICASSP, 2012.
分析attention的layer
一些文献:Attention is not Explanation、Attention is not not Explanation
"attention能不能被解释"依然是尚待研究的问题(禁止套娃蛤)
另外一种技术:探针(Probing)
用探针插入network看看发生了什么事,举例来说,想了解BERT的layer里面到底学到了什么东西,实际上可视化技巧就比较局限了。
所以我们可以通过使用探针——实质上是训练好的一个分类器:(E.g.)
关于probing的例子:训练一个语音合成的模型(训练这样一个TTS【Text to Speech】模型,把某一个layer的embedding吃进去,尝试"重建"原始输入),我们可以通过重建后的输出了解到——如果说里面一层layer除去了语者的声音特征,只保留了声音讯号内容所完成了这样一个流程。

另一个例子:5层的biLSTM。声音讯号作为输入,输出一段文字。语音辨识模型。男生和女生的声音资料在通过5层的biLSTM后声色没有什么区别了(人耳无法区分)。

上图另一个例子,3层的CNN和3层的BiLSTM。输入有背景音,在第一层LSTM滤掉了大半背景声。
以图片分类为例,假定我们还没有开始对数据集进行classify,我们需要对classify整个model的参数特征做出解释(例如说什么样的东西可以是一只猫,如果分类任务中包含猫咪的话),对一个network而言一只猫应该长什么样子。而不是针对指定数据(点/图片)的进行分析或结果。
E.g.假定已有一个train好的CNN,里面有若干层卷积层(Conv Layer),有一堆filter。一张图片作为输入,conv layer输出一个feature map,那每一个filter都会给我们一个metric

假设输入一张图片,通常是一个矩阵。把图片丢进这个CNN里边,我们会发现某一个filter(假设filter1)在它的feature map里面有几个位置有比较大的值(large values)——意味着这个图片里有很多的pattern是由filter1负责侦测的。
我们想要知道的是对于filter1而言,其理想的pattern的feature map究竟长什么样子——怎么做?答:我们/机器可以创造出一张图片
filter1的feature map是一个矩阵,矩阵里每一个元素记作,我们把要找的那张图片当作一个未知变量,当作我们要训练的那个参数,如上图所示,这个未知变量丢进CNN以后,我们考察的filter的位置所输出的feature map理想情况下矩阵的总和要越大越好。综上,满足
这个不是数据集里面一张特定的图片;我们把丢进CNN中,看filter1输出的feature map,值越大越好。(原理:gradient ascent)

以手写数字分类器为例(digit classifier),我们按照以上方法想找到网络中间的filter的理想的feature map长什么样,也可以看到网络最后的output(令各自分类置信度最高)。

实际上,filter确实表达出其想看到的feature,例如横线、直线、斜直线等

可是,对于分别设置高置信度maximum出来(创造出来的)图片,看起来实在没什么区别!
如果我们想要图片得到人可以想象(肉眼识别的)数字图像,我们需要加一点限制。举例来说,我们加一个对数字的期望,这个表示how likely is a digit,这里的

在文献https://arxiv.org/abs/1506.06579,爆调超参数,各种正则化……“反推”得到

train一个image的generator,可以用GAN or VAE

Image Generator和分类器连接一块,我们的目标函数就是
找出来的图片长什么样:

很work(表面上看……),感觉就是强行解释……(自欺欺人)
用一个比较简单的模型来模仿比较复杂的模型,如果我们知道简单模型的行为,那么也可以由此知道复杂模型的行为。
有点像同态的思想

(弹幕有提到知识蒸馏……)
*Local Interpretable Model-Agnostic Explanations (LIME):阅读文献以及作业